From: Jasper St. Pierre Date: Mon, 26 Nov 2012 19:55:03 +0000 (-0500) Subject: grabHelper: Drop to the actor clicked on X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5280 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=066e5cddb5c939ea95f406a383c5da52a0997f4e;p=gnome-shell.git grabHelper: Drop to the actor clicked on This is necessary for child popups in menus, e.g. while in a combo box, clicking outside of the user menu should drop the entire menu, but clicking on the user menu itself should only drop the combo box. https://bugzilla.gnome.org/show_bug.cgi?id=689109 --- diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js index aacce4334..b9e661ff4 100644 --- a/js/ui/grabHelper.js +++ b/js/ui/grabHelper.js @@ -103,6 +103,16 @@ const GrabHelper = new Lang.Class({ return -1; }, + _actorInGrabStack: function(actor) { + while (actor) { + let idx = this._findStackIndex(actor); + if (idx >= 0) + return idx; + actor = actor.get_parent(); + } + return -1; + }, + isActorGrabbed: function(actor) { return this._findStackIndex(actor) >= 0; }, @@ -323,7 +333,8 @@ const GrabHelper = new Lang.Class({ // which should be a release event. if (press) this._ignoreRelease = true; - this.ungrab({ actor: this._grabStack[0].actor }); + let i = this._actorInGrabStack(event.get_source()) + 1; + this.ungrab({ actor: this._grabStack[i].actor }); } return this._modalCount > 0;